import java.util.Scanner;

/*
Driver.java
Autor: Paola Garcia, carnet 10205
Fecha: 02 septiembre 2011
Descripcion: clase principal que genera las acciones del banco.
*/

import java.util.InputMismatchException;
import java.util.Random;

public class Driver {
	public static void main(String[] args){
		//Declaracion de objetos
		Listas<Double> colas = new Listas<Double>();
		Random num = new Random();
		
		//declaracion de variables
		double numRandom = 0;
		int opcion, opcion1, tiempo;
		int tiempo1 = 1;
		

		do{
			menu(); //se muestra el menu de opciones
		
			opcion = (int)obtenerNumero("Ingrese la opcion que desee realizar: ", false);
            switch(opcion){
				case 1: //ingresar nuevo cliente al banco
					 do{
						 subMenu(); //se muestra el submenu de opciones
						 opcion1 = (int)obtenerNumero("Ingrese la opcion que desee realizar: ", false);
				            switch(opcion1){
							case 1: //ver estado de colas
								System.out.println("Estado de las colas: ");
								System.out.println(colas);
								break;
							case 2: //seleccionar cola
								//pedir hora de ingreso del cliente
								tiempo = (int)obtenerNumero("Hora a la que ha entrado: ",false);
								if(tiempo>= tiempo1 && tiempo <= 480){	//ver que sea una hora correcta
									tiempo1 = tiempo;
									numRandom = num.nextInt(31); //random de 30 numeros
									if(tiempo1 <= numRandom)
										colas.offer(numRandom);
									//sacar de la cola cuando sea necesario
										else{
											colas.poll();
										}
									}	
								else
									System.out.println("Esa hora ya ha pasado; si es mas de 480, el banco ha cerrado.");
								break;
							case 3: //salir del submenu
								break;
				            }
					 }while(opcion1 != 3);
				break;
				
				case 2: //salir del programa
					System.out.println("Feliz dia! ");
					break;
			}
		}while(opcion != 2);
	
	}

	
	//Se crea el menu de opciones
	public static void menu(){
		System.out.println(); 
        System.out.println("+--        MENU DE OPCIONES           --+");
        System.out.println("| 1. Ingresar nuevo cliente al banco.   |");
		System.out.println("| 2. Salir del banco.                   |");
        System.out.println("+---------------------------------------+");
		
	}
	
	//Se crea el submenu de opciones
	public static void subMenu(){
		System.out.println(); 
        System.out.println("+--        SUBMENU DE OPCIONES       --+");
        System.out.println("| 1. Ver estado de las colas.          |");
		System.out.println("| 2. Entrar a la cola.                 |");
		System.out.println("| 3. Salir del submenu.                |");
        System.out.println("+--------------------------------------+");
		
	}

//Programacion defensiva que obtiene el valor ingresado por el usuario
	public static double obtenerNumero(String mensaje, boolean mostrar){
        Scanner ingreso = new Scanner(System.in);
        double numero = -1; //Se resta 1 para que sea el valor correcto
			System.out.print(mensaje);
			try{
				numero = ingreso.nextDouble();
			}
			catch(InputMismatchException exception){ //Atrapa la excepcion
				if (mostrar)
					System.out.println("\nHEY! ese dato es invalido. =] \n" + "Ingresa de nuevo \n");
			}
			finally{
				ingreso.nextLine();//Agarrar enter
			}
			return numero;
    }
}

